//using System;
//using System.Collections.Generic;
//using System.Text;
//using Microsoft.DirectX.Direct3D;
//using Microsoft.DirectX;
//using System.Drawing;

//namespace Noein
//{
//    public class ParticleEmitter : Object
//    {
//        private class Particle
//        {
//            public Object obj;
//            public float life;
//        }

//        private int capacity;
//        private int used;
//        private LinkedList<Particle> particles;
//        private Control.ParticleController controller;
        

//        private float generationRate;
//        // cone
//        // size
//        // color
//        // transparency
//        // mass
//        // life time


//        public ParticleEmitter(Visual visual, int capacity, int lifeTime) : base(null)
//        {
//            this.capacity = capacity;
//            controller = new Control.ParticleController();

//            // initiate particle pool
//            Particle[] particleArray = new Particle[capacity];
//            for (int i = 0; i < capacity; i++)
//            {
//                particleArray[i] = new Particle();
//                particleArray[i].obj = MakeParticle(visual);
//                particleArray[i].life = 5;
//            }
//            particles = new LinkedList<Particle>(particleArray);

//            used = capacity;
//        }

//        // HACK
//        public void Update(Device d, double t, float dt)
//        {
//            LinkedListNode<Particle> node = particles.First;
//            for (int i = 0; i < used; i++)
//            {
//                Particle particle = node.Value;
//                particle.life -= dt;
//                //node.Value.life -= dt;
//                if (particle.life < 0)
//                {
//                    particle.life = 0;
//                    LinkedListNode<Particle> prevNode = node.Previous;

//                    particles.Remove(node);
//                    particles.AddLast(node);

                    
//                    node = prevNode;

//                    i--;
//                    used--;
//                }
//                else
//                {
//                    pc.Target = node.Value.obj;
//                    pc.OnFrameMove(d, t, dt);
//                }

//                node = node.Next;
//            }
//        }

//        // HACK
//        public Object MakeParticle(Visual visual)
//        {
//            Object retVal = new Object(visual);
//            retVal.Spatial.TeleportTo(Spatial.Position);
//            retVal.PhysicsInfo = new Physics.PhysicsInfo(retVal.Spatial);
//            retVal.PhysicsInfo.Mass = 1;
//            retVal.PhysicsInfo.Momentum = new Vector3(0, 2, 0);
//            return retVal;
//        }

//        public override void Render(Device device)
//        {
//            LinkedListNode<Particle> node = particles.First;
//            for (int i = 0; i < used; i++)
//            {
//                ((Particle)node.Value).obj.Render(device);
//                node = node.Next;
//            }

//            //
//        }
//    }
//}
